*** Settings ***
Documentation  This resource provides any keywords related to the Harbor private registry appliance
Resource  ../../resources/Util.robot

*** Variables ***

*** Keywords ***
Disable Scan Schedule
    Retry Double Keywords When Error  Retry Element Click  ${vulnerability_edit_btn}  Retry Wait Until Page Not Contains Element  ${vulnerability_edit_btn}
    Retry Element Click  ${vulnerability_dropdown_list}
    Retry Element Click  ${vulnerability_dropdown_list_item_none}
    Retry Double Keywords When Error  Retry Element Click  ${vulnerability_save_btn}  Retry Wait Until Page Not Contains Element  ${vulnerability_save_btn}

Set Scan Schedule
    [Arguments]  ${type}  ${value}=${null}
    Retry Double Keywords When Error  Retry Element Click  ${vulnerability_edit_btn}  Retry Wait Until Page Not Contains Element  ${vulnerability_edit_btn}
    Retry Element Click  ${vulnerability_dropdown_list}
    Run Keyword If  '${type}'=='custom'  Run Keywords  Retry Element Click  ${vulnerability_dropdown_list_item_custom}  AND  Retry Text Input  ${targetCron_id}  ${value}
    Retry Double Keywords When Error  Retry Element Click  ${vulnerability_save_btn}  Retry Wait Until Page Not Contains Element  ${vulnerability_save_btn}

Trigger Scan Now And Wait Until The Result Appears
    Retry Element Click  xpath=${scan_now_button}
    Sleep  60
    Retry Wait Until Page Contains Element  ${scan_now_result}

Switch To Vulnerability Page
    Retry Element Click  xpath=//clr-main-container//clr-vertical-nav//a[contains(.,'Interrogation')]
    Retry Element Click  xpath=//app-interrogation-services//a[contains(.,'Vulnerability')]
    Retry Wait Element  ${scan_now_button}


Set Vulnerabilty Serverity
#0 is critical, 1 is high, 2 is medium, 3 is low, 4 is negligible.
    [Arguments]  ${level}
    Goto Project Config
    #enable first
    Retry Element Click  ${project_config_prevent_vulenrability_checkbox_label}
    Checkbox Should Be Selected  //project-detail//clr-checkbox-wrapper//input[@name='prevent-vulenrability-image-input']
    Retry Element Click  //project-detail//select
    #wait for dropdown popup
    Sleep  1
    Select From List By Index  //project-detail//select  ${level}
    Retry Element Click  ${project_config_save_btn}

Scan Is Disabled
    Retry Wait Until Page Contains Element  //button[contains(.,'Scan') and @disabled='']

Move To Summary Chart
    Sleep  2
    Wait Until Element Is Visible  //hbr-vulnerability-bar//hbr-result-tip-histogram
    Mouse Over  //hbr-result-tip-histogram
    Sleep  1

Scan Repo
#use fail for image clair can not scan, otherwise use success
    [Arguments]  ${tagname}  ${status}
    #select one tag
    Retry Element Click  //clr-dg-row[contains(.,'${tagname}')]//label
    Retry Element Click  //button[contains(.,'Scan')]
    Run Keyword If  '${status}' == 'Succeed'  Wait Until Element Is Visible  //hbr-vulnerability-bar//hbr-result-tip-histogram  300
    Run Keyword If  '${status}' == 'Fail'  Wait Until Element Is Visible  //hbr-vulnerability-bar//a  300

Scan Result Should Display In List Row
    [Arguments]  ${tagname}  ${is_no_vulerabilty}=${false}
    Run Keyword If  ${is_no_vulerabilty}==${true}  Retry Wait Until Page Contains Element  //artifact-list-tab//clr-dg-row[contains(.,'No vulnerability') and contains(.,'${tagname}')]//clr-dg-cell//clr-tooltip
    ...  ELSE  Retry Wait Until Page Contains Element  //artifact-list-tab//clr-dg-row[contains(.,'Total') and contains(.,'Fixable') and contains(.,'${tagname}')]//clr-dg-cell//clr-tooltip

Enable Scan On Push
    Checkbox Should Not Be Selected  //clr-checkbox-wrapper[@id='scan-image-on-push-wrapper']//input
    Retry Element Click  //clr-checkbox-wrapper[@id='scan-image-on-push-wrapper']//label
    Checkbox Should Be Selected  //clr-checkbox-wrapper[@id='scan-image-on-push-wrapper']//input
    Retry Element Click  ${project_config_save_btn}
    Sleep  10

Vulnerability Not Ready Project Hint
    Sleep  2
    ${element}=  Set Variable  xpath=//span[contains(@class, 'db-status-warning')]
    Wait Until Element Is Visible And Enabled  ${element}

Switch To Scanners Page
    Retry Element Click  xpath=//clr-main-container//clr-vertical-nav//a[contains(.,'Interrogation')]
    Retry Wait Until Page Contains Element  ${set_default_scanner}

Should Display The Default Clair Scanner
    Retry Wait Until Page Contains Element  //clr-datagrid//clr-dg-row//clr-dg-cell[contains(.,'Clair')]//span[contains(.,'Default')]

Should Display The Default Trivy Scanner
    Retry Wait Until Page Contains Element  //clr-datagrid//clr-dg-row//clr-dg-cell[contains(.,'Trivy')]//span[contains(.,'Default')]

Clair Is Immutable Scanner
    Retry Element Click  //clr-dg-row[contains(.,'Clair')]//clr-radio-wrapper/label
    Retry Double Keywords When Error  Retry Element Click  ${scanner_action_xpath}  Retry Wait Until Page Contains Element  ${delete_scanner_action_xpath}
    Retry Double Keywords When Error  Retry Element Click  ${delete_scanner_action_xpath}  Retry Wait Until Page Contains Element  ${delete_scanner_confirm_btn}
    Retry Double Keywords When Error  Retry Element Click  ${delete_scanner_confirm_btn}  Retry Wait Until Page Contains Element  ${immutable_msg_xpath}

Trivy Is Immutable Scanner
    Retry Element Click  //clr-dg-row[contains(.,'Trivy')]//clr-radio-wrapper/label
    Retry Double Keywords When Error  Retry Element Click  ${scanner_action_xpath}  Retry Wait Until Page Contains Element  ${delete_scanner_action_xpath}
    Retry Double Keywords When Error  Retry Element Click  ${delete_scanner_action_xpath}  Retry Wait Until Page Contains Element  ${delete_scanner_confirm_btn}
    Retry Double Keywords When Error  Retry Element Click  ${delete_scanner_confirm_btn}  Retry Wait Until Page Contains Element  ${immutable_trivy_msg_xpath} 

Set Default Scanner
    [Arguments]  ${scanner_name}
    Retry Element Click  //clr-dg-row[contains(.,'${scanner_name}')]//clr-radio-wrapper/label
    Retry Double Keywords When Error  Retry Element Click  ${scanner_set_default}  Retry Wait Until Page Contains Element  ${scanner_set_default_success_xpath}
